package cn.kgc.mybatis.jdbc;

import cn.kgc.mybatis.entity.User;
import cn.kgc.mybatis.utils.JDBCUtil;
import com.mysql.jdbc.Driver;

import java.sql.*;
import java.util.ArrayList;

/**
 * @author: mosin
 * @version: v1.0  2022/9/26
 *
 * 使用jdbc完成数据库的操作
 * 1.导包  mysql-connector-java
 * 2. 注册驱动
 * 3.获取连接
 * 4.获取执行sql语句的对象 statement
 * 5.发送sql  处理结果集
 * 6.关闭连接 释放资源
 *
 * jdbc操作中存在的不足：
 * 1. 获取连接的过程比较繁琐 存在代码冗余
 * 2.释放资源的过程比较繁琐
 * 3.处理结果集的过程比较繁琐
 * 4.sql语句直接编写在java代码中 存在代码的耦合
 * 5.编写动态sql比较繁琐    -> 搜索

 * 如何简化jdbc的操作
 * 1.创建工具类 解决 获取连接和释放资源繁琐的过程  JDBCUtil
 * 2. 引入第三方的工具  DBUtils
 *
 * 使用 JDBCUtil+DBUtils 依然存在两个问题没有解决
 *
 * 使用mybatis框架可以解决以上全部问题
 * 1. 下载mybatis的工具包
 * 2. 编写配置文件  全局配置 mybatis-config.xml   mapper.xml文件
 * 3. 使用 sqlSession   完成crud操作
 *

 */
public class TetJDBC {

    public static void main(String[] args) throws SQLException {

        //注册驱动
        //Driver driver = new Driver();
        //DriverManager.registerDriver(driver);
        // 获取连接
        //String url = "jdbc:mysql:///java2216?useSSL=false";
        //String username = "root";
        //String password = "root";
        //Connection connection = DriverManager.getConnection(url, username, password);

        // 通过工具类获取连接
        Connection connection = JDBCUtil.getConnection();

        // 获取执行sql语句的对象
        String sql = "select * from user ";
        PreparedStatement preparedStatement = connection.prepareStatement(sql);
        //执行sql
        ResultSet resultSet = preparedStatement.executeQuery();

        ArrayList<User> users = new ArrayList<>();

        // 处理结果集
        while (resultSet.next()){
            int id = resultSet.getInt(1);
            String uname = resultSet.getString(2);
            String pwd = resultSet.getString(3);

            User user = new User();
            user.setId(id);
            user.setPassword(pwd);
            user.setUsername(uname);
            users.add(user);
        }

        //以上对于结果集处理 可以使用dbutils

        // 打印结果集
        System.out.println("size:"+users.size());
        System.out.println("users = " + users);

        //释放资源
        //resultSet.close();
        //preparedStatement.close();
        //connection.close();

        // 通过工具类释放资源
        JDBCUtil.closeAll(resultSet, preparedStatement, connection);

    }
}
